/*******************************************************************************
    @file      main.cpp
    @brief    适配器模式可以将一个类的接口转换成客户端希望的另一个接口
    使用场景: 有动机地修改一个正常运行的系统的接口，这时应该考虑使用适配器模式
    使用方式: 继承或依赖（推荐）
    优点: 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。
	缺点:  过多地使用适配器，会让系统非常零乱，不易整体进行把握

	角色分析

	Target 目标角色，期望接口

	Adaptee 源角色，期望被转换的角色

	Adapter 适配器角色，核心，将元角色转换为目标角色，通过继承或者类关联的方式

    220v的电压，转化为用户需要的18v电压

    @details   ~
    @date      21.03.2022
    @copyright © Yu Dai Cheng Technologies Co Ltd, 2022. All right reserved.
*******************************************************************************/
#include <iostream>

using namespace std;

class Current18v {
public:
    virtual void useCurrent18v() = 0;

    virtual ~Current18v() {

    }
};

class Current220v {
public:
    void useCurrent220v() {
        cout << "使用 220v" << endl;
    }
};

class Adapter : public Current18v {
public:
    Adapter(Current220v *current) {
        m_current = current;
    }

    virtual void useCurrent18v() {
        cout << "适配 220v";
        m_current->useCurrent220v();
    }

private:
    Current220v *m_current;
};

// 220v的电压，转化为用户需要的18v电压
int main(int argc, char *argv[]) {

    Current220v *current220v = NULL;
    Adapter *adapter = NULL;

    current220v = new Current220v;
    adapter = new Adapter(current220v);
    adapter->useCurrent18v();

    delete adapter;
    delete current220v;

    return 0;
}